iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
自我挑戰組

DevOps的下克上之旅( ° ∀ ° )ノ゙系列 第 25

Day 25: ELK持續監控與Dockerize

  • 分享至 

  • xImage
  •  

今天來講述CI/CD的最後一個流程,Monitor。將App部署上機器後,我們仍然必須持續監控他的狀態、流量、使用情形甚至是出錯的情境。大多的時候,程式會將這些使用情形寫成log檔,如果你對Ubuntu系統比較熟悉,你一定知道要常常查看/var/log/資料夾內的資料來幫助debug。

一旦系統變得過於大型,我們又該怎麼能方便的使用log檔呢? ELK正是為了此需求而誕生,ELK由三項東西組成(其實應該說4項):

  • beats : 負責採集Log檔
  • Logstash : 負責分析Log檔(也可採集)
  • ElasticSearch : 保存Log檔
  • Kibana : 視覺化呈現Log檔

基本流程如下,Beats採集Log文件傳送給Logstash,Logstash清理完成後交由Elastic保存起來,最後給予kibana呈現。
https://ithelp.ithome.com.tw/upload/images/20210927/20119044SEkUGyATNo.png

我之前寫過關於ELK相關的安裝與介紹,為了配合我們的主題:所有東西都要用container包住,今天會來講解怎麼用docker-compose安裝ELK。並且稍微講一下Node.js的Log系統morgan做為範例。

Morgan

Morgan常用於Node.js的Log保存,官方文件,寫起來也很方便,如下是morgan應用在express上,詳細程式參考:

var express = require('express')
var router = express.Router();
var fs = require('fs')
var morgan = require('morgan')
const DBconnect = require("../DBconnect");
var app = express()

// create a write stream (in append mode)
var accessLogStream = fs.createWriteStream(path.join(__dirname,'logs', 'access.log'), { flags: 'a' })
 
// setup the logger (common模式)
app.use(morgan('common', { stream: accessLogStream }))

// Get Fail on Purpose
router.get("/Fail",function(req,res){
  res.status(404).send("Fail !!")
})

// Get Data
router.get('/company',function(req,res){
  const sql = "SELECT * FROM COMPANY";
  DBconnect.query(sql)
    .then(data=>{
      console.log(data)
      res.send(data)
    })
})

在morgan common模式下log會長的如下:

:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length]

輸出如圖:
https://ithelp.ithome.com.tw/upload/images/20210927/20119044tnDLaJphl1.png

建立ELK

接著我們來用Docker-compose建立ELK吧,這裡使用docker-elk Github

  • git clone https://github.com/deviantony/docker-elk.git
  • cd docker-elk && docker-compose up

等等繼續寫


上一篇
Day 24 : Jenkins 在Build完通知與好用套件
下一篇
Day 26 : Github Actions
系列文
DevOps的下克上之旅( ° ∀ ° )ノ゙30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言